/******************************************************************************
 * Copyright CSDN 双子座断点 Co., Ltd.
 * Copyright www.dreambeging.vip Co., Ltd.
 * All right reserved. See COPYRIGHT for detailed Information.
 *
 * @file       radioswitch.h
 * @version    V 1.0
 *
 * @author     断点<dream.2017@qq.com>
 * @date       2022/11/22
 * @history
 *****************************************************************************/

#ifndef RADIOSWITCH_H
#define RADIOSWITCH_H

#include <QWidget>
#include <QDebug>
#include <QTimer>
#include <QColor>
#include <QPainter>
#include <QMouseEvent>

class radioswitch : public QWidget
{
    Q_OBJECT

public:
    explicit radioswitch(QWidget *parent = 0);
    ~radioswitch(){}

public:
    int getStep();                                  //返回动画步长
    int getStartX();                                //返回滑块开始X轴坐标
    int getEndX();                                  //返回滑块结束X轴坐标
    int getSpace();                                 //返回滑块边界距离
    int getRadius();                                //返回圆角角度
    bool getChecked();                              //返回是否选中
    bool getShowText();                             //返回文字是否显示
    bool getAnimation();                            //返回动画是否使用
    QColor getTextColor();                          //返回文字颜色
    QColor getBGColorOn();                          //返回打开时候的背景色
    QColor getBGColorOff();                         //返回关闭时候的背景色
    QColor getSliderColorOn();                      //返回打开时候滑块颜色
    QColor getSliderColorOff();                     //返回关闭时候滑块颜色
    QString getTextOn();                            //返回打开时候的文字
    QString getTextOff();                           //返回关闭时候的文字
    int m_startX;               //滑块开始X轴坐标

public Q_SLOTS:
    void setSpace(int space);                       //设置滑块边界距离
    void setRadius(int radius);                     //设置圆角角度
    void setChecked(bool checked);                  //设置是否选中
    void setShowText(bool show);                    //设置字是否显示
    void setAnimation(bool ok);                     //设置动画是否使用
    void setBgColorOn(const QColor &color);         //设置背景颜色
    void setBgColorOff(const QColor &color);        //设置背景颜色
    void setSliderColorOn(const QColor &color);     //设置滑块颜色
    void setSliderColorOff(const QColor &color);    //设置滑块颜色
    void setTextColor(const QColor &color);         //设置字体颜色
    void setTextOn(const QString &text);            //设置字体颜色
    void setTextOff(const QString &text);           //设置字体颜色
signals:
    void statusChanged(bool checked);

protected:
    void paintEvent(QPaintEvent *ev);
    void mousePressEvent(QMouseEvent *ev);

public slots:

private slots:
    void updateValue();

private:
    void drawBackGround(QPainter *painter);
    void drawSlider(QPainter *painter);

private:
    int m_space;                //滑块距离边界距离
    int m_radius;               //圆角角度
    int m_step;                 //动画步长
    int m_endX;                 //滑块结束X轴坐标
    bool m_checked;             //是否选中
    bool m_showText;            //是否显示文字
    bool m_animation;           //是否使用动画
    QTimer  *m_timer;           //动画定时器
    QString m_textOn;           //打开时候的文字
    QString m_textOff;          //关闭时候的文字
    QColor m_bgColorOn;         //打开时候的背景色
    QColor m_bgColorOff;        //关闭时候的背景色
    QColor m_sliderColorOn;     //打开时候滑块颜色
    QColor m_sliderColorOff;    //关闭时候滑块颜色
    QColor m_textColor;         //文字颜色

};

#endif // RADIOSWITCH_H
